package com.tledu.spring.domain;

import com.baomidou.mybatisplus.annotation.*;

import java.io.Serializable;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 
 * </p>
 *
 * @author rupert-tears
 * @since 2021-07-08
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class User implements Serializable {

    private static final long serialVersionUID=1L;

    /**
     * 主键ID
     * 主键生成策略 默认 ID_WORKER 全局唯一id 雪花算法
     *
     * 配置 主键生成策略
     * 第一步 实体类中配置注解  @TableId(value = "id", type = IdType.AUTO)
     * 第二步 数据库中设置主键自增 AUTO 会忽略输入的 ID
     * INPUT 表示输入
     *
     * @JsonFormat(shape = JsonFormat.Shape.STRING)作用就是将JSON数据的此字段格式化为字符串类型，保证前端超过17位不会出现精度丢失问题！
     * 由于JavaScript中Number类型的自身原因，并不能完全表示Long型的数字，在Long长度大于17位时会出现精度丢失的问题。
     * 所以，不应该使用ResponseBean<Long>，应该使用ResponseBean<String>，转换成字符串类型的。
     *
     *
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    @TableId(value = "id", type = IdType.INPUT)
    private Long id;

    /**
     * 姓名
     */
    private String name;

    /**
     * 年龄
     */
    private Integer age;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 自动填充
     * 创建时间
     * 编写处理出 来处理这个注解
     */
    @TableField(fill = FieldFill.INSERT)
    private Date create_time;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date update_time;

    /**
     * 乐观锁
     */
    @Version
    private Integer version;

    /**
     * 逻辑删除
     */
    @TableLogic
    private Integer deleted;

}
